iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0

為了我們之後方便寫比特幣的交易我們來仔細說明一下比特幣的交易

傳統線上交易-Account Model

  • 在傳統的線上交易系統裡面,我們會在 DataBase 裡面存放許多個人信息和交易紀錄
    • 我們有屬於我們自己的 account 並在這個 account 底下進行交易以及扣款
    • 例如可能會有 accounts 和 transaction 之類的 table ,一個會儲存個人基本資料,另一個則會記錄你帳戶的資料
  • 註:因為以太幣也是利用 Account Model ,之後會再次詳細介紹它以及兩者的比較

UTXO Model

  • 全名是 Unspent Transaction Output

  • UTXO 的模型內並沒有所謂的單一長本記錄所有帳戶的餘額,那變成要怎麼查詢帳戶的餘額呢?

  • 答案就是你要回顧所有的交易資料,再去做統整,才能得到這個帳戶的餘額

    • 也就是一個**輸入 ( input ) = 輸出 ( output )**的概念
  • 在帳戶中的每個 Output (有點像是收入 + ),會成為下次交易的 Input(有點像是支出 - )

    • 因此假設 Tx0, Tx1 的 Output 都是 A ,分別為 2 塊錢以及 3 塊錢,今天 A 要給 B 5 塊錢,就會讓 Tx0, Tx1 作為 Tx2 的 Input ,而因為 2 + 3 ( input ) == 5 ( output )
      https://ithelp.ithome.com.tw/upload/images/20191001/20120131x2wRlDNNqB.png
  • 那如果 Input 和 Output 不相等呢?那不就會有餘額剩下來呢?

  • 還記得我們的 UTXO 的全名嗎? Unspent Transaction Output ,換句話說,沒被花費的餘額也會變成一個 Output,如下圖

    • 例如假設 Tx0, Tx1 的 Output 都是 A ,分別為 7 塊錢以及 3 塊錢,今天 A 要給 B 8 塊錢,就會讓 Tx0, Tx1 作為 Tx2 的 Input ,而因為 7 + 3 ( input ) = 10 ( input ) == 8 ( output to B ) + 2 ( output to A ) -後面這個就是 Unspent Output
  • 礦工的工作就是要驗證為花費的 Ouput 是否真的還未被花費過-也就是預防 ( Double Spending )

    • 礦工的手續費:輸入-輸出 =差額(手續費)

https://ithelp.ithome.com.tw/upload/images/20191001/20120131SnNYvWKmZd.png

  • 比特幣的 UTXO 模型儘管看起來作為數據處理的手段看似有點複雜,但是它已經在比特幣下運行多年了,並且它能有效的防止 Double spending Attack 和 Replay Attack ,因此 UTXO 雖然看似複雜,但是還是有它適合的應用場景的

上一篇
Go to Blockchain: Day14 自幹區塊鏈 (ver. python3)
下一篇
Go to Blockchain: Day16 區塊鏈的一些攻擊
系列文
Go to Blockchain: 從區塊鏈基礎到用 Go 實作區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言